#pragma once

namespace BombBox
{
	struct Slot
	{
		int nX,nY,nZ;
		int nType;

		Slot() : nX(0), nY(0), nZ(0), nType(0) {} 

		Slot( int x, int y, int z, int type )
			: nX(x), nY(y), nZ(z), nType(type) {}

		bool isSlot( int x, int y, int z )
		{
			return (nX==x) && (nY==y) && (nZ==z);
		}

		wchar_t* getStr();
		bool fromStr( const char* pData );
	};

	class SceneConfig
	{
	public:
		SceneConfig(void);
		~SceneConfig(void);

		//void setMapSize( int x, int y, int z );

		//void setData( int x, int y, int z, int value );
		//int getData( int x, int y, int z );

		//void setValueMap( int value, const irr::core::stringc sModelName );
		//const irr::core::stringc getModelName( int value );
	public:
		void saveConfig( irr::io::IXMLWriter* sFileWriter );
		void loadConfig( irr::core::stringc sFile );

	public:
		void setCreater( irr::core::stringc sCreater );
		void setMapName( irr::core::stringc sMapName );
		void addData( int x, int y, int z, int data );
		int incBombCount( int nBombID );

		void clearData( int x,int y,int z );
		void clear( void );
		void setPublish( void );

	public:
		irr::core::stringc getCreater( void );
		irr::core::stringc getMapName( void );
		const irr::core::array<Slot>& getData( void );
		const irr::core::map<int,int>& getBombData( void );
		bool isPublished( void ){ return m_bPublished; } 
		int getBombCnt( int nBombID );

	public:
		void setDefaultRoom( void );

	protected:
		irr::core::stringc m_sCreater;
		irr::core::stringc m_sMapName;

		irr::core::array<Slot>	m_vDatas;
		irr::core::aabbox3di	m_vBoundingBox;

		bool					m_bPublished;

		irr::core::map<int,int>	m_vBombsData;
	};

}